# -*- coding: utf-8 -*-
"""
@Time    : 2024/10/9 16:44 
@Author  : ZhangShenao 
@File    : 2.提取手机号.py 
@Desc    : 提取手机号

如果一段正则表达式需要被频繁使用
那么可以先调用compile方法,将它编译成正则表达式对象
这样后续反复使用时效率更高
"""
import re

# 提前编译手机号的正则表达式对象
# 用了前瞻和回顾来保证手机号前后不应该出现数字
mobile_pattern = re.compile(r"(?<=\D)1[34578]\d{9}(?=\D)")


def find_mobiles() -> None:
    # 定义元素内容
    content = """
     重要的事情说8130123456789遍，我的手机号是13512346789这个靓号，
    不是15600998765，也是110或119，王大锤的手机号才是15600998765。
    """

    # 调用findall方法,返回所有匹配项的列表
    mobiles = re.findall(mobile_pattern, content)
    print(f"mobiles: {mobiles}")
    print("--------------------------")

    # 调用finditer方法,返回所有匹配项的迭代器
    for match in re.finditer(mobile_pattern, content):
        print(f"mobile: {match.group()}")
    print("--------------------------")

    # 通过search函数指定搜索位置找出所有匹配
    m = mobile_pattern.search(content)
    while m:
        print(m.group())
        m = mobile_pattern.search(content, m.end())
    print("--------------------------")


if __name__ == '__main__':
    find_mobiles()
